#import <UIKit/UIKit.h>
#import "MapAppSettings.h"
#import "SFUConstants.h"
#import "GraphicsUtilities.h"
#import "ValueSelectorView.h"
#import "BusDirectoryManager.h"
#import "MapViewController.h"

// Constants for the search field groups
enum {
	MapGroup,
	PinNotesGroup,
	FoursquareGroup,
	DirectoryGroup,
	EventGroup,
	MiscGroup
};

// Constants
enum {
	MapTypeSelector,
	CampusSelector,
	EventIntervalSelector,
	FoursquareVenueLimitSelector,
	FoursquareTipLimitSelector
};

// Constants
enum {
	DeletePinNotesTag,
	UpdateDirectoryTag,
	ResetSettingsTag
};

@class MapViewController;

/**
 * A MapAppSettingsView is an object representing the view that provides
 * the functionality to modify the application settings.
 *
 * @author      James Lin
 * @author      Justin Hollander
 * @version     2.2.5
 * @since       1.1.1
 * @see         BusDirectoryDelegate
 * @see         ValueSelectorDelegate
 * @see         UIAlertViewDelegate
 */
@interface MapAppSettingsView : UITableViewController <BusDirectoryDelegate, 
														ValueSelectorDelegate, 
														UIAlertViewDelegate> {
	MapAppSettings*         settings;  // Current application settings
	UINavigationController* parentNav; // Navigation controller of parent view
	MapViewController*      mvc;       // Reference to the main view controller
}

@property (nonatomic, retain) UISegmentedControl* mapTypeControl;
@property (nonatomic, retain) UILabel* eventIntervalLabel;

/**
 * Retrieve the shared instance of the application settings view.
 *
 * @return  the shared instance of MapAppSettingsView
 */
+ (MapAppSettingsView*)sharedSettingsView;

/**
 * Display the application settings view.
 *
 * Pushes this view onto the navigation controller stack of the parent
 * view. Upon tapping the back button, the view is automatically 
 * popped off the top of the navigation stack.
 *
 * @param navController  the navigation controller of the parent view
 */
- (void)displayWithNavController:(UINavigationController*)navController;

/**
 * Set the main view controller reference.
 *
 * @param viewController  the main view controller
 */
- (void)setMVC:(MapViewController*)viewController;

@end
